/**
 * uview 路由拦截器
 * @Author: liruilin 1443254530@qq.com
 * @Date: 2025-4-8 14:02:26
 * @LastEditors: liruilin 1443254530@qq.com
 * @FilePath: libs\common\route.interceptor.js
 * @Description: uview 路由拦截器
 */
import routes from '@/libs/config/route.js'
import { useUserStore } from "@/libs/store"
import { isCurrentPageByLogin,  hasLoginTask, exitLoginPageProcessing } from '@/libs/hooks/useUser.js'

const install = function(Vue) {
    const userStore = useUserStore()
    /**
     * 跳转页面前，可以在这里处理拦截
     * @param {Object} mergeConfig
     * @param {Object} next
     */
    const beforRouteIntercept = function(mergeConfig, next){
        const currentRouteInfo = routes[mergeConfig.url.split('?')[0]]
        if(currentRouteInfo){
        	// 判断登录
        	if(currentRouteInfo.loginAuth ? !userStore.isLogin : false){
        		hasLoginTask()
        		return next(false)
        	}
            // 自定义验证器
            if(typeof currentRouteInfo.validator === 'function'){
                return currentRouteInfo.validator(mergeConfig, next)
            }
        }
        next(true)
    }
    
    /**
     * 跳转页面后，通过全局混淆页面的onLoad实现
     * 处理直接访问未登录页面逻辑，正常情况下都通过前置路由拦截了，这里相当于是vue route的after处理
     * 某些情况下例如小程序扫码二维码、H5 url直接访问、App 通过协议链接打开需要这样处理路由拦截
     * @param {object} params - 页面路由参数
     * @param {object} pageNode - 当前页面的路由栈节点  
     */
    const afterRouteIntercept = function(params, pageNode){
        /**
         * 不询问用户直接跳转到首页，放开这段代码
         */
        // if(!userStore.isLogin && isCurrentPageByLogin()) exitLoginPageProcessing()
        
        /**
         * 询问用户是否需要去登录页面，放开这段代码
         */
        if(isCurrentPageByLogin()) hasLoginTask()
    }
    
	uni.$u.routeIntercept = beforRouteIntercept
    // 这里是自定义加的一个方法逻辑，uview官方无此逻辑
    uni.$u.afterRouteIntercept = (params) => {
        const pages = getCurrentPages()
        afterRouteIntercept(params, pages[pages.length - 1])
    }
}

export default {
	install
}
